/*
* Requires: jquery
*/
jQuery(document).ready( ($) => {
$('
').appendTo('body')
const cursor = document.querySelector('#cursor')
const cursorCircle = cursor.querySelector('.cursor__circle')
const allowedIn = document.querySelectorAll('.cursor--allow')
const mouse = { x: -100, y: -100 };
const pos = { x: 0, y: 0 };
const speed = 0.09;
const updateCoordinates = e => { mouse.x = e.clientX, mouse.y = e.clientY }
for ( let i = 0; i < allowedIn.length; i++ ) { allowedIn[i].addEventListener('mousemove', updateCoordinates) }
function getAngle(diffX, diffY) { return Math.atan2(diffY, diffX) * 180 / Math.PI }
function getSqueeze(diffX, diffY) {
const distance = Math.sqrt( Math.pow(diffX, 2) + Math.pow(diffY, 2) )
const maxSqueeze = 0.1125
const accelerator = 1500
return Math.min(distance / accelerator, maxSqueeze)
}
const updateCursor = () => {
const diffX = Math.round(mouse.x - pos.x);
const diffY = Math.round(mouse.y - pos.y);
pos.x += diffX * speed;
pos.y += diffY * speed;
const angle = getAngle(diffX, diffY);
const squeeze = getSqueeze(diffX, diffY);
const scale = 'scale(' + (1 + squeeze) + ', ' + (1 - squeeze) +')';
const rotate = 'rotate(' + angle +'deg)';
const translate = 'translate3d(' + pos.x + 'px ,' + pos.y + 'px, 0)';
cursor.style.transform = translate;
cursorCircle.style.transform = rotate + scale;
};
function loop() { updateCursor(); requestAnimationFrame(loop) }
requestAnimationFrame(loop);
allowedIn.forEach(cursorMods => {
cursorMods.addEventListener('mouseenter', () => cursor.classList.add('cursor--allowed') )
cursorMods.addEventListener('mouseleave', () => cursor.classList.remove('cursor--allowed') )
})
})